【MySQL】データの基本操作 - 追加・取得・更新・削除
ここでは、MySQLのデータの基本操作を解説します。
検証環境
データ
MySQLのRDBのデータ操作(追加・取得・更新・削除など)は基本的にレコード単位で行います。
本ドキュメントでは次のテーブルを例に各操作を解説します。
mysql> desc items;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name | varchar(20) | YES | | NULL | |
| price | int | YES | | NULL | |
| stock | int | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
追加(INSERT INTO VALUE
)
データの追加はINSERT INTO VALUE
文を使います。
基本構文
INSERT INTO テーブル名(カラム1, カラム2 ...) VALUE(値1, 値2 ...)
テーブル名後の丸括弧(()
)内に値を格納するカラムを記述し、複数ある場合はカンマ(,
)で区切ります。
VALUE
後の丸括弧(()
)内は各カラムの値(データ)です。
カラムと同様に複数ある場合はカンマで区切りますが、値の順序はカラムの順序と一致するようにしてください。
サンプル
mysql> INSERT INTO items (
-> name, price, stock
-> ) VALUE (
-> 'Apple', 200, 10
-> );
Query OK, 1 row affected (0.00 sec)
※ ->
は構文とは関係ありません。(改行時に自動で出力される記号です。)
一部カラムのみの指定も可能です。
mysql> INSERT INTO items (
-> name, price
-> ) VALUE (
-> 'Apple', 200
-> );
Query OK, 1 row affected (0.00 sec)
また、(カラム)
を省略すると、全てのカラムが対象になります。
mysql> INSERT INTO items VALUE ( 'Apple', 200, 10 );
Query OK, 1 row affected (0.00 sec)
複数追加(INSERT INTO VALUES
)
複数データの一括追加はINSERT INTO VALUES
文を使います。
基本構文
INSERT INTO テーブル名(カラム) VALUES(値),(値),(値);
1つのみの追加(VALUE
)と基本的には同じです。
レコードは丸括弧(()
)単位で記述し、複数ある場合はカンマ(,
)で区切ります。
サンプル
mysql> INSERT INTO items (
-> name, price, stock
-> ) VALUES (
-> 'Orange', 150, 3
-> ),(
-> 'Pineapple', 1100, 3
-> ),(
-> 'Grapes', 3500, 1
-> );
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
取得(SELECT FROM
)
データの取得はSELECT FROM
文を使います。
基本構文
SELECT カラム1, カラム2 ... FOMR テーブル名;
データを取得するカラムが複数ある場合はカンマ(,
)で区切って記述します。
サンプル
mysql> SELECT name, price, stock FROM items;
+-----------+-------+-------+
| name | price | stock |
+-----------+-------+-------+
| Apple | 200 | 10 |
| Orange | 150 | 3 |
| Pineapple | 1100 | 3 |
| Grapes | 3500 | 1 |
+-----------+-------+-------+
4 rows in set (0.00 sec)
全てのカラムを取得対象とする場合は、*
の省略形を使用できます。
mysql> SELECT * FROM items;
+-----------+-------+-------+
| name | price | stock |
+-----------+-------+-------+
| Apple | 200 | 10 |
| Orange | 150 | 3 |
| Pineapple | 1100 | 3 |
| Grapes | 3500 | 1 |
+-----------+-------+-------+
4 rows in set (0.00 sec)
条件指定(WHERE
)
SELECT FROM
文はテーブルの全データを取得します。
そのため、一般的には条件指定のWHERE
句を併用します。
mysql> SELECT * FROM items WHERE name = 'Apple';
+-------+-------+-------+
| name | price | stock |
+-------+-------+-------+
| Apple | 200 | 10 |
+-------+-------+-------+
1 row in set (0.00 sec)
WHERE name = 'Apple'
の部分がWHERE
句です。
詳細は別途ドキュメントで解説しますが、上記サンプルはname
カラムの値が'Apple'
のレコードを取得の対象とするように条件を設定しています。
更新(UPDATE SET
)
データの更新はUPDATE SET
文を使います。
基本構文
UPDATE テーブル名 SET カラム = 値;
サンプル
mysql> SELECT * FROM items;
+-----------+-------+-------+
| name | price | stock |
+-----------+-------+-------+
| Apple | 200 | 10 |
| Orange | 150 | 3 |
| Pineapple | 1100 | 3 |
| Grapes | 3500 | 1 |
+-----------+-------+-------+
4 rows in set (0.00 sec)
___ih_hl_start
mysql> UPDATE items SET stock = 88;
___ih_hl_end
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4 Changed: 4 Warnings: 0
mysql> SELECT * FROM items;
+-----------+-------+-------+
| name | price | stock |
+-----------+-------+-------+
| Apple | 200 | 88 |
| Orange | 150 | 88 |
| Pineapple | 1100 | 88 |
| Grapes | 3500 | 88 |
+-----------+-------+-------+
4 rows in set (0.00 sec)
条件指定(WHERE
)
UPDATE SET
文は全レコードの値を更新することに注意が必要です。
特定レコードのみ更新する場合、WHERE
句を併用して、更新対象の条件を設定します。
mysql> SELECT * FROM items;
+-----------+-------+-------+
| name | price | stock |
+-----------+-------+-------+
| Apple | 200 | 10 |
| Orange | 150 | 3 |
| Pineapple | 1100 | 3 |
| Grapes | 3500 | 1 |
+-----------+-------+-------+
4 rows in set (0.00 sec)
___ih_hl_start
mysql> UPDATE items SET price = 300 WHERE name = 'Apple';
___ih_hl_end
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> SELECT * FROM items;
+-----------+-------+-------+
| name | price | stock |
+-----------+-------+-------+
| Apple | 300 | 10 |
| Orange | 150 | 3 |
| Pineapple | 1100 | 3 |
| Grapes | 3500 | 1 |
+-----------+-------+-------+
4 rows in set (0.00 sec)
WHERE name = 'Apple'
の部分がWHERE
句です。
詳細は別途ドキュメントで解説しますが、上記サンプルはname
カラムの値が'Apple'
のレコードを更新の対象とするように条件を設定しています。
特定レコードのみの更新の場合、WHERE
句を忘れると意図しない操作になり、DBを含むシステムのデータ破壊につながる恐れがあります。
そのため、クエリの書き出しはWHERE
から記述するなどの“WHERE
句の付け忘れ防止対策”を行うことが推奨です。
削除(DELETE FROM
)
データ(レコード)の削除はDELETE FROM
文を使います。
基本構文
DELETE FROM テーブル名;
サンプル
mysql> SELECT * FROM items;
+-----------+-------+-------+
| name | price | stock |
+-----------+-------+-------+
| Apple | 300 | 10 |
| Orange | 300 | 3 |
| Pineapple | 300 | 3 |
| Grapes | 300 | 1 |
+-----------+-------+-------+
4 rows in set (0.00 sec)
___ih_hl_start
mysql> DELETE FROM items;
___ih_hl_end
Query OK, 4 row affected (0.00 sec)
mysql> SELECT * FROM items;
Empty set (0.00 sec)
条件指定(WHERE
)
DELETE FROM
文は全レコードを削除することに注意が必要です。
特定レコードのみ削除する場合、WHERE
句を併用して、削除対象の条件を設定します。
mysql> SELECT * FROM items;
+-----------+-------+-------+
| name | price | stock |
+-----------+-------+-------+
| Apple | 300 | 10 |
| Orange | 300 | 3 |
| Pineapple | 300 | 3 |
| Grapes | 300 | 1 |
+-----------+-------+-------+
4 rows in set (0.00 sec)
mysql> DELETE FROM items WHERE name = 'Apple';
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM items;
+-----------+-------+-------+
| name | price | stock |
+-----------+-------+-------+
| Orange | 300 | 3 |
| Pineapple | 300 | 3 |
| Grapes | 300 | 1 |
+-----------+-------+-------+
3 rows in set (0.00 sec)
WHERE name = 'Apple'
の部分がWHERE
句です。
詳細は別途ドキュメントで解説しますが、上記サンプルはname
カラムの値が'Apple'
のレコードを削除の対象とするように条件を設定しています。
特定レコードの削除の場合、WHERE
句を忘れると意図しない操作になり、DBを含むシステムのデータ破壊につながる恐れがあります。
そのため、クエリの書き出しはWHERE
から記述するなどの“WHERE
句の付け忘れ防止対策”を行うことが推奨です。